// src/utils/debounce.ts

/**
 * 创建一个防抖函数，确保它在延迟时间过后只执行一次。
 * @param func 要执行的函数
 * @param delay 延迟时间（毫秒）
 * @returns 包装后的防抖函数
 */
export function debounce<T extends (...args: any[]) => any>(
  func: T,
  delay: number
): (...args: Parameters<T>) => void {
  let timeoutId: ReturnType<typeof setTimeout>;

  return (...args: Parameters<T>) => {
    // 清除之前的计时器
    clearTimeout(timeoutId);

    // 设置新的计时器
    timeoutId = setTimeout(() => {
      func.apply(null, args);
    }, delay);
  };
}